//
// Created by 李传智 on 2018/4/12.
//

#ifndef ANDSDK_FFDEMUX_H
#define ANDSDK_FFDEMUX_H

#include "IDemux.h"

struct AVFormatContext;

class FFDemux : public IDemux {

public:

    FFDemux();

    // 打开文件，或者流媒体 rtsp, rmtp, http
    virtual bool open(const char *url);

    // position 0.0~1.0
    virtual bool seek(double position);

    virtual void close();

    // 获取视频参数
    virtual CodecParameter getVideoCodecParameters();

    // 获取音频参数
    virtual CodecParameter getAudioCodecParameters();

    // 读取一帧数据，数据由调用者清理
    virtual VideoData read();

private:

    // 格式上下文
    AVFormatContext *fmtContext = 0;

    std::mutex mutex;

    // 视频流索引
    int videoStreamIdx = 0;

    // 音频流索引
    int audioStreamIdx = 1;
};


#endif //ANDSDK_FFDEMUX_H
